
//632.最小区间
class Solution {
    public:
        vector<int> smallestRange(vector<vector<int>>& nums) {
            int k=nums.size();
            vector<pair<int,int>> vv;  //pair用于存储元素的值和对应的数组位置
            for(int i=0;i<k;i++)
                for(auto e:nums[i]) vv.push_back({e,i});
            sort(vv.begin(),vv.end());   //进行排序
    
            unordered_map<int,int> count; //存储每个数组元素出现的次数
            int ansl=0,ansr=INT_MAX;
            int n=vv.size(),left=0;
            for(int right=0;right<n;right++)
            {
                count[vv[right].second]++;  //入窗口
                while(count.size()==k)     
                {
                    if(ansr-ansl>vv[right].first-vv[left].first)
                    ansr=vv[right].first,ansl=vv[left].first;   //更新答案
    
                    if(--count[vv[left].second]==0) count.erase(vv[left].second);
                    left++;
                }
            }
            return {ansl,ansr};
        }
    };